<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Object.assign()</title>
</head>
<body>

</body>
<script>
    // 1、作用
    // 用于将所有可枚举属性的值从一个或多个源对象分配到目标对象,它将返回目标对象。
    // 常用来合并对象

    // 2、语法
    Object.assign(target, ...sources) // 参数：target 目标参数，sources源对象 返回值：目标对象

    // 3、例子
    const obj1 = { a: 1, b: 2 }
    const obj2 = { b: 3, c: 4 }
    const obj3 = Object.assign(obj1, obj2)
    const obj4 = Object.assign({}, obj1) // 克隆了obj1对象
    console.log(obj1) // { a: 1, b: 3, c: 4 } 对同名属性b进行了替换 obj1发生改变是因为obj2赋给了obj1
    console.log(obj2) // { b: 3, c: 4 }
    console.log(obj3) // { a: 1, b: 3, c: 4 }
    console.log(obj4) // { a: 1, b: 3, c: 4 }

    // 注意：
    //  如果目标对象中的属性具有相同的键，则属性将被源对象中的属性覆盖。
    //  Object.assign 方法只会拷贝源对象自身的并且可枚举的属性到目标对象。
    //  assign是浅拷贝,也就是说，如果源对象某个属性的值是对象，那么目标对象拷贝得到的是这个对象的引用。同名属性会替换
    //  Object.assign 不会在那些source对象值为null或undefined的时候抛出错误
</script>
</html>
